//
//  CourseAddStudentVC.m
//  优学荟管理系统
//
//  Created by 星道 on 17/6/28.
//  Copyright © 2017年 星道三好. All rights reserved.
//

#import "CourseAddStudentVC.h"
#import "HNCourseEvaluationsTC.h"
#import "ZYCourseAttendanceTowModel.h"

@interface CourseAddStudentVC ()<UITableViewDataSource,UITableViewDelegate>
{
    IBOutlet UITableView *_TableView;
    IBOutlet UILabel *_AllSelectBtn;
}
/**
 当前页码
 */
@property (nonatomic, assign) NSInteger CurrentPage;
/**
 临时页码
 */
@property (nonatomic, assign) NSInteger TempPage;
/**
 数据存放
 */
@property (nonatomic, strong) NSMutableArray *DataArr;
/**
 存储全选状态
 */
@property (nonatomic, assign) BOOL AllSelect;
/**
 新增学生成功之保存到这个数组
 */
@property (nonatomic, strong) NSMutableArray *PreservedArr;
@end

@implementation CourseAddStudentVC

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"新增学生";

    [_AllSelectBtn addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(ClickAllSelect)]];

    // 配置TableView
    [self SetupTableView];

}



#pragma mark  - 配置
/**
 配置TableView
 */
- (void)SetupTableView
{
    // 占位
    _TableView.tableFooterView = [UIView new];
    _TableView.tableHeaderView = [UIView new];
    // 预注册
    [_TableView registerNib:[UINib nibWithNibName:[HNCourseEvaluationsTC description] bundle:nil] forCellReuseIdentifier:@"Cell"];
    // 预估高度
    _TableView.rowHeight = UITableViewAutomaticDimension;
    _TableView.estimatedRowHeight = 50;
    //默认页码
    self.CurrentPage = 1;
    // 下拉刷新
    _TableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{

        //取当前页码给临时页码
        self.TempPage = self.CurrentPage;
        //设当前页码为1
        self.CurrentPage = 1;
        //请求
        [self RefreshData];
    }];
    //上拉加载
    _TableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{

        //请求
        [self RefreshData];
    }];
    //开始刷新
    [_TableView.mj_header beginRefreshing];
}


/**
 刷新失败时，判断是否需要从临时页码里取出来给当前页码
 */
- (void)GetPage
{
    if (self.CurrentPage == 1)
    {
        self.CurrentPage = self.TempPage;
    }
}

/**
 结束刷新

 @param Index 0:结束刷新 1:提示没有更多数据 2:tableView数据源更新
 */
- (void)EndRefresh:(NSInteger)Index;
{
    dispatch_async(dispatch_get_main_queue(), ^{
        switch (Index)
        {
            case 0:
            {
                [_TableView.mj_header endRefreshing];
                [_TableView.mj_footer endRefreshing];
            }
                break;
            case 1:
            {
                [_TableView.mj_footer endRefreshingWithNoMoreData];
            }
                break;
            case 2:
            {
                [_TableView reloadData];
            }
                break;
            default:
                break;
        }
    });
}



#pragma mark - 网络请求
/**
 网络请求
 */
- (void)RefreshData
{

    NSDictionary *Params = @{
                             @"action"      :@"getStudentsByOid",
                             @"pageNumber"  :@(self.CurrentPage),
                             @"lessonId"    :self.lessonId,
                             @"oid"         :[AccountTool shareAccountTool].currentAccount.oid
                             };
    [NetManager Get:LLBaseURL(@"yxhUser.do") Auth:YES Params:Params Success:^(id Obj) {

        //结束刷新
        [self EndRefresh:0];
        //判断是否加载成功
        if ([Obj[@"code"] isEqualToNumber:@1000])
        {
            NSArray *DataList = Obj[@"t"][@"dataList"];
            // 判断是否为0
            if (DataList.count == 0)
            {
                // 提示没有更多数据了
                [self EndRefresh:1];
            }
            else
            {
                // 判断要不要清空数组
                if (self.CurrentPage == 1)
                {
                    [self.DataArr removeAllObjects];
                }
                // 赋值
                [DataList enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    //转模型
                    ZYCourseAttendanceTowModel *Model = [[ZYCourseAttendanceTowModel alloc] init_ObjectForValue:(NSDictionary *)obj];
                    // 设置身份标志为 增加学生
                    Model.IsAddStudent = YES;
                    // 全部设为未选中
                    Model.isSign = @1;
                    [self.DataArr addObject:Model];
                }];

                //数据请求成功，页码加1
                self.CurrentPage += 1;
                //通知主线程刷新
                [self EndRefresh:2];
            }
        }
        else
        {
            //页码处理
            [self GetPage];
            //显示错误信息
            [MBProgressHUD showError:Obj[@"msg"]];
        }
    } Fail:^(NSError *Error) {

        //结束刷新
        [self EndRefresh:0];
        //页码处理
        [self GetPage];
        //显示错误信息
        [MBProgressHUD showError:NetErr];
    }];
}



/**
 增加学生网络请求
 */
- (void)RefreshDataForAddStudent
{
    [MBProgressHUD showHUD];
    // 遍历数据源，取出所有的被选中的模型值放进数组
    NSMutableArray *IDArr = [NSMutableArray array];
    // 开始遍历
    [self.DataArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        // 保存被选中的id
        ZYCourseAttendanceTowModel *Model = (ZYCourseAttendanceTowModel *)obj;
        [Model.isSign isEqualToNumber:@2]?[IDArr addObject:[Model.uid stringValue]]:nil;
    }];
    //判断是否能新增,不能新增则不继续走下去
    if (IDArr.count == 0)
    {
        [HUD showError:@"请选择需要增加的学生"];
        return;
    }
    //开始递交增加请求
    NSString *IDStr = [IDArr componentsJoinedByString:@","];
    NSDictionary *Params = @{
                             @"uids"        :IDStr,
                             @"lessonId"    :self.lessonId,
                             @"action"      :@"addStudentToEnroll"
                             };
    [NetManager Get:LLBaseURL(@"yxhUser.do") Auth:YES Params:Params Success:^(id Obj) {

        //不管什么状态都输出文本
        if ([Obj[@"code"] isEqualToNumber:@1000])
        {
            //保存待删除的模型
            NSMutableArray *DeleteArr = [NSMutableArray array];
            // 新增加学生成功,将ID重新弄成数组，再将从数据源里面设置选中,且按钮不可点击
            [self.DataArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                // 取值
                ZYCourseAttendanceTowModel *Model = (ZYCourseAttendanceTowModel *)obj;
                [IDArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    NSString *IDStr = (NSString *)obj;
                    if ([[Model.uid stringValue] isEqualToString:IDStr])
                    {
                        //比较成功之后设置isSign为2
                        Model.isSign = @2;
                        //如果选择删除行的就直接保存模型在DeleteArr,在循环结束后清除
                        [DeleteArr addObject:Model];
                    }
                }];
            }];
            // 还是选择清除行了啊，加入豪华宵夜吧
            [self.DataArr removeObjectsInArray:DeleteArr];
            // 主线程通知删除Cell
            dispatch_async(dispatch_get_main_queue(), ^{
                [_TableView reloadSections:[[NSIndexSet alloc] initWithIndex:0] withRowAnimation:(UITableViewRowAnimationAutomatic)];
                if (self.RefreshStudent) {
                    // 删除成功之后刷新界面
                    self.RefreshStudent ();
                }
            });
        }
        else
        {
            [HUD showError:Obj[@"msg"]];

        }
    } Fail:^(NSError *Error) {
        // 显示失败提示
        [HUD showError:NetErr];
    }];
}






#pragma mark - TableView代理
//区
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

//行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.DataArr.count;
}

//Cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 取值
    ZYCourseAttendanceTowModel *Model = self.DataArr[indexPath.row];
    // 实例Cell
    HNCourseEvaluationsTC *Cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    // 调用点语法
    Cell.Model(Model);
    //单击了选择
    Cell.ClickSelect = ^(UIButton *Button){

        self.MgrSelect(Model,Button);
    };
    return Cell;
}





#pragma mark - 点击事件
/**
 全选切换
 */
- (void)ClickAllSelect {

    self.MgrAllSelect();
}


/**
 点击了增加学生
 */
- (IBAction)Sure:(UIButton *)sender
{
    // 处理
    [self MgrSure:sender];
}






#pragma mark - 处理点击事件
/**
 处理选择事件
 */
- (instancetype (^)(ZYCourseAttendanceTowModel *,UIButton *))MgrSelect {

    return  ^(ZYCourseAttendanceTowModel *Model,UIButton *Button) {

        Button.selected = !Button.selected;
        Model.isSign = Button.selected?@2:@1;
        return self;
    };
}

/**
 处理判断全选的
 */
- (instancetype (^)())MgrAllSelect {

    return ^() {

        //遍历赋值选择状态
        [self.DataArr enumerateObjectsUsingBlock:^(ZYCourseAttendanceTowModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            ZYCourseAttendanceTowModel *Model = obj;
            Model.isSign = self.AllSelect == YES?@2:@1;
        }];
        [self EndRefresh:2];
        //0是选中状态，1是未选中状态
        self.AllSelect = !self.AllSelect;
        return self;
    };
}


/**
 处理增加学生事件
 */
- (void)MgrSure:(UIButton *)Button
{
    // 弹框提示
    UIAlertController *Alert = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"是否确认新增所选学生?" preferredStyle:(UIAlertControllerStyleActionSheet)];
    [Alert addAction:[UIAlertAction actionWithTitle:@"新增" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {
        //确定增学生则发起网络请求
        [self RefreshDataForAddStudent];
    }]];
    [Alert addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:nil]];
    [self presentViewController:Alert animated:YES completion:nil];
}



#pragma mark - Setter
- (NSMutableArray *)DataArr
{
    if (!_DataArr)
    {
        _DataArr = [NSMutableArray array];
    }
    return _DataArr;
}

@end
